#pragma once
#include "AdderFunction.h"
class AdderValue;
class AdderBytecodeEngine;

class BuiltinClassFunction: public AdderFunction
{
public:
	int argument_count;
	AdderObject* this_object;
	BuiltinClassFunction0 func0;
	BuiltinClassFunction1 func1;
	BuiltinClassFunction2 func2;
	BuiltinClassFunction3 func3;
	BuiltinClassFunction4 func4;
	BuiltinClassFunction5 func5;

	BuiltinClassFunction();
	BuiltinClassFunction(AdderObject* this_object, BuiltinClassFunction0 func);
	BuiltinClassFunction(AdderObject* this_object, BuiltinClassFunction1 func);
	BuiltinClassFunction(AdderObject* this_object, BuiltinClassFunction2 func);
	BuiltinClassFunction(AdderObject* this_object, BuiltinClassFunction3 func);
	BuiltinClassFunction(AdderObject* this_object, BuiltinClassFunction4 func);
	BuiltinClassFunction(AdderObject* this_object, BuiltinClassFunction5 func);
	AdderValue * execute(AdderBytecodeEngine* engine);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2, AdderValue* arg3);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2, AdderValue* arg3, AdderValue* arg4);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2, AdderValue* arg3, AdderValue* arg4, AdderValue* arg5);
};
